gtk_window_map_event(): new function to work around lost unmap requests.
authorTim Janik <timj@imendio.com>
Thu, 15 Sep 2005 13:31:33 +0000 (13:31 +0000)
committerTim Janik <timj@src.gnome.org>
Thu, 15 Sep 2005 13:31:33 +0000 (13:31 +0000)
Thu Sep 15 15:27:55 2005  Tim Janik  <timj@imendio.com>

        * gtk/gtkwindow.c:
        gtk_window_map_event(): new function to work around lost unmap requests.
        fixes bug #316180.

ChangeLog
ChangeLog.pre-2-10
gtk/gtkwindow.c

index 38d40e55a1b1e9560c36171119a3b679b6980d11..0a5424521647b3db30a1e0873259af7cccdd3fda 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Sep 15 15:27:55 2005  Tim Janik  <timj@imendio.com>
+
+       * gtk/gtkwindow.c: 
+       gtk_window_map_event(): new function to work around lost unmap requests.
+       fixes bug #316180.
+
 2005-09-14  Federico Mena Quintero  <federico@ximian.com>
 
        * gtk/gtkfilechooserdefault.c (gtk_file_chooser_default_init): Add
index 38d40e55a1b1e9560c36171119a3b679b6980d11..0a5424521647b3db30a1e0873259af7cccdd3fda 100644 (file)
@@ -1,3 +1,9 @@
+Thu Sep 15 15:27:55 2005  Tim Janik  <timj@imendio.com>
+
+       * gtk/gtkwindow.c: 
+       gtk_window_map_event(): new function to work around lost unmap requests.
+       fixes bug #316180.
+
 2005-09-14  Federico Mena Quintero  <federico@ximian.com>
 
        * gtk/gtkfilechooserdefault.c (gtk_file_chooser_default_init): Add
index 85cc9a27e2492cdb981176e458eb7065426fa204..0edd23ff6a407793c6c06307729be62d9a70427b 100644 (file)
@@ -191,6 +191,8 @@ static void gtk_window_size_allocate      (GtkWidget         *widget,
                                           GtkAllocation     *allocation);
 static gint gtk_window_event              (GtkWidget *widget,
                                           GdkEvent *event);
+static gboolean gtk_window_map_event      (GtkWidget         *widget,
+                                           GdkEventAny       *event);
 static gboolean gtk_window_frame_event    (GtkWindow *window,
                                           GdkEvent *event);
 static gint gtk_window_configure_event    (GtkWidget         *widget,
@@ -385,6 +387,7 @@ gtk_window_class_init (GtkWindowClass *klass)
   widget_class->show = gtk_window_show;
   widget_class->hide = gtk_window_hide;
   widget_class->map = gtk_window_map;
+  widget_class->map_event = gtk_window_map_event;
   widget_class->unmap = gtk_window_unmap;
   widget_class->realize = gtk_window_realize;
   widget_class->unrealize = gtk_window_unrealize;
@@ -4107,6 +4110,24 @@ gtk_window_map (GtkWidget *widget)
     }
 }
 
+static gboolean
+gtk_window_map_event (GtkWidget   *widget,
+                      GdkEventAny *event)
+{
+  if (!GTK_WIDGET_MAPPED (widget))
+    {
+      /* we should be be unmapped, but are getting a MapEvent, this may happen
+       * to toplevel XWindows if mapping was intercepted by a window manager
+       * and an unmap request occoured while the MapRequestEvent was still
+       * being handled. we work around this situaiton here by re-requesting
+       * the window being unmapped. more details can be found in:
+       *   http://bugzilla.gnome.org/show_bug.cgi?id=316180
+       */
+      gdk_window_hide (widget->window);
+    }
+  return FALSE;
+}
+
 static void
 gtk_window_unmap (GtkWidget *widget)
 {